/*
 * @Author: zhaoqr
 * @Date: 2024-06-24
 * @LastEditTime: 2024-06-24
 * @LastEditors: zhaoqr zhaoqr@channelsoft.com
 * @Description: 
 * @FilePath: \vue3-template\src\utils\WeakMap.ts
 */
/**
 * 1. 弱引用（Weak Reference）:
 * WeakMap中的键（key）必须是对象（包括数组、函数等），而不能是原始类型（如字符串、数字）。
 * 对于这些对象键，WeakMap持的是弱引用。这意味着如果某个对象仅被WeakMap所引用，那么垃圾回收机制可以释放这个对象所占用的内存，而在普通的Map中，只要键值对存在，垃圾回收机制就不会回收该键所指向的对象。
 * 2. 不可枚举性:
 * WeakMap实例是不可迭代的，没有像Map那样的entries()、keys()、values()等方法，也不能用for...of循环遍历。同时，WeakMap也没有size属性来获取其包含的键值对数量。
 * 3. 私有性:
 * 由于外部无法通过迭代或其它方式访问WeakMap的内容，这使得WeakMap非常适合用于存储与特定对象关联的信息，实现某种程度上的数据隐藏或元数据存储，常用于实现私有变量或模拟私有属性。
 */
const privateFields = new WeakMap();

export default class privateClass { 
  constructor() { 
    privateFields.set(this, { privateField: 'Hello' });
  }

  test() {
    console.log(this)
    console.log(privateFields.get(this).privateField);
  }
}
